import axios from 'axios'

/*
早期做法
//  process.env.NODE_ENV=development/production
//  开发环境(development):  npm run serve   http://localhost:3000/api
//  生产环境(production):  npm run build    http://ihrm-java.itheima.net/api
开发环境变量
  创建一个开发环境使用的文件，在内部定义开发环境的变量 ，在开发环境中使用
生产环境变量
  创建一个生产环境使用的文件，在内部定义生产环境的变量 ，在生产环境中使用
根据当前环境自动读取该文件内容

开发环境文件创建
   在根目录(package.json同级目录)创建文件 .env.development   文件
   定义变量：
      规则：VUE_APP_     开头
      VUE_APP_XXX='变量值'
    访问:process.env.VUE_APP_XXX
生产环境文件创建
   在根目录(package.json同级目录)创建文件 .env.production   文件
   定义变量：
      规则：VUE_APP_     开头
      VUE_APP_XXX='变量值'
    访问:process.env.VUE_APP_XXX
*/
import { Message } from 'element-ui' // Message===this.$message
import store from '@/store'
import router from '@/router'
const _axios = axios.create({
  // baseURL:
  //   process.env.NODE_ENV === 'development'
  //     ? 'http://localhost:3000/api'
  //     : 'http://ihrm-java.itheima.net/api',
  baseURL: process.env.VUE_APP_URL,
  timeout: 5000,
  withCredentials: true // 跨域请求时允许带上cookie
  // cookie特点：它会主动参与接口请求（同源：域名，端口,协议）,不同源的默认不主动参与
})
_axios.interceptors.request.use(
  (config) => {
    // 所有接口都加了请求头
    // 1:所有接口都加请求头不报错
    // config.headers.Authorization = `Bearer ${store.state.user.token}`
    // 2：不让你加请求头的你加了它直接报错
    if (!config.noToken) {
      config.headers.Authorization = `Bearer ${store.state.user.token}`
    }
    // console.log('config', config)

    return config
  },
  (err) => {
    return Promise.reject(err)
  }
)
_axios.interceptors.response.use(
  (res) => {
    // 状态码2开头
    if (res.data.success === false) {
      // 提示
      Message.error(res.data.message)
      // 中止.then执行 执行catch
      return Promise.reject(new Error(res.data.message))
    } else {
      return res.data
    }
  },
  (err) => {
    // 状态码非2开头
    // console.log('响应拦截err', err)
    // console.dir(err)
    if (err.response && err.response.data.code === 10002) {
      // token失效  1：删除token，删除用户信息   2:错误提示   3：跳转到登录页
      store.commit('user/logout')
      Message.error(err.response.data.message)
      router.push('/login')
    }
    return Promise.reject(err)
  }
)
export default _axios
